package com.williams.myo2o.util;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.imageio.ImageIO;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;


import java.util.Date;
import java.util.Random;

/**
 * @auther williams
 * @create-time 2018-07-28-下午1:34
 */


public class ImageUtil {

    private static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
	private static final Random RANDOM = new Random();

    /**处理缩略图函数
     * 接收的参数为用户上传的文件 thumbnail 和 你想要存放的文件存储路径 targetaddr
     * 要想处理用户上传的缩略图，就得先获得用户上传文件所存放的路径，处理后再将其导出到你想要存放的路径
     * 因为用户上传的文件名错乱且有重名，所以舍弃改成系统自动给名字
     * */

    public static String generateThumbnail(InputStream thumbnailInputStream,String fileName, String targetaddr){
        //系统自动给前缀名
        String realFileName = getRandomFileName();
        //获取扩展名，如 .jpg .png
        String extension = getFileExtension(fileName);
        //文件存储路径的目录有时候是不存在的，所以需要将它创建出来,makeDirPath 创建路径
        makeDirPath(targetaddr);
        //拼接成相对路径
        String relativeAddr = targetaddr + realFileName + extension;
        //获取文件绝对路径
        File dest = new File(PathUtil.getImageBasePath()+relativeAddr);
        try{
            Thumbnails.of(thumbnailInputStream)
            .size(160, 160)
            .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("/home/williams/Documents/ CampusStore/src/main/resources/watermark.jpg")), 0.5f)
            .outputQuality(0.8)
            .toFile(dest);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return relativeAddr;
    }



//    public static void main(String[] args) throws IOException {
////        String basePath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
////        System.out.println(basePath);
//        Thumbnails.of(new File("/home/williams/Pictures/touxiang.png"))
//        .size(160, 160)
//        .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("/home/williams/Documents/ CampusStore/src/main/resources/watermark.jpg")), 0.5f)
//        .outputQuality(0.8)
//        .toFile(new File("/home/williams/Pictures/touxiangnew.png"));
//
//    }

     /**
     * 生成随机文件名:当前年月日小时分钟秒钟 + 五位随机数
     * (为了在实际项目中防止文件同名而进行的处理)
     */
    public static String getRandomFileName() {
        // 获取随机的五位数
        int randNum = RANDOM.nextInt(89999) + 10000;
        String nowTimeStr = sDateFormat.format(new Date());
        return nowTimeStr + randNum;
    }

    /**
     * 获取输入文件流的扩展名
     */
    private static String getFileExtension(String filename) {

        return filename.substring(filename.lastIndexOf("."));
    }

    /**
	 * 创建目标路径所涉及到的目录，即/home/williams/picture/xxx.jpg
	 * 那么 home/williams/picture 这三个文件夹要能自动创建出来
	 * @param targetAddr
	 */
	private static void makeDirPath(String targetAddr) {
		String realFileParentPath = PathUtil.getImageBasePath() + targetAddr;
		File dirPath = new File(realFileParentPath);
		if (!dirPath.exists()) {
			dirPath.mkdirs();
		}
	}
}
